namespace OasisCiq.Xnl
{
    // TODO: XLink attributes
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using CommonTypes;
    using External;
    using XS;

    /// <summary>
    /// Reusable complex type
    /// </summary>
    public class OrganisationNameType : IDataQualityGroup, IValidityDateGroup, ILanguageCodeGroup, IXLink, IExtendedAttributes
    {
        public ICollection<OrganisationNameElement> NameElements { get; set; }

        public ICollection<SubDivisionName> SubDivisions { get; set; }

        /// <summary>
        /// Enumerated list of common types of aliases or name types.
        /// </summary>
        public OrganisationNameTypeList Type { get; set; }

        /// <summary>
        /// A unique identifier of an organisation
        /// </summary>
        public CTString OrganisationId { get; set; }

        /// <summary>
        /// Type of identifier
        /// </summary>
        public OrganisationIdTypeList OrganisationIdType { get; set; }

        /// <summary>
        /// Globally unique identifer
        /// </summary>
        public CTString Id { get; set; }

        /// <summary>
        /// Usage of organisation name. How is it used and for what purpose.
        /// Allows user which name in a set of names to select for a given purpose.
        /// e.g. used for legal purposes
        /// </summary>
        public OrganisationNameUsageList Usage { get; set; }

        /// <summary>
        /// Status of the entity. e.g. Old, Current, Inactive, Active, etc
        /// </summary>
        public StatusList Status { get; set; }

        public XSDateTime DateValidFrom { get; set; }

        public XSDateTime DateValidTo { get; set; }

        public NameKeyGroup NameKey { get; set; }

        public DataQualityTypeList DataQualityType { get; set; }

        public XSDateTime ValidFrom { get; set; }

        public XSDateTime ValidTo { get; set; }

        public XSLanguage LanguageCode { get; set; }

        public NameValueCollection ExtendedAttributes { get; set; }
    }
}